//package com.ruoyi.wechat.component.mqtt;
//
//
//import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.integration.annotation.IntegrationComponentScan;
//import org.springframework.integration.annotation.ServiceActivator;
//import org.springframework.integration.channel.DirectChannel;
//import org.springframework.integration.core.MessageProducer;
//import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
//import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
//import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
//import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
//import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
//import org.springframework.messaging.MessageChannel;
//import org.springframework.messaging.MessageHandler;
//
//import javax.annotation.PostConstruct;
//import java.util.Objects;
//
//
//@Configuration
//@IntegrationComponentScan
//public class MqttConfig {
//
//    private static Logger log = LoggerFactory.getLogger(MqttConfig.class);
//
//    public static final String OUTBOUND_CHANNEL = "mqttOutboundChannel";
//
//    public static final String INPUT_CHANNEL = "mqttInputChannel";
//
//    /**
//     * 订阅的主题
//     */
//    public static final String SUB_TOPICS = "WifiSock/+/Socket,aaaaa";
//
//    @Autowired
//    MqttCallbackHandler mqttCallbackHandler;
//
//    @Value("${mqtt.username}")
//    private String username;
//
//    @Value("${mqtt.password}")
//    private String password;
//
//    @Value("${mqtt.hostUrl}")
//    private String hostUrl;
//
//    @Value("${mqtt.clientId}")
//    private String clientId;
//
//    @Value("${mqtt.defaultTopic}")
//    private String defaultTopic;
//
//    @PostConstruct
//    public void init() {
//        log.debug("username:{} password:{} hostUrl:{} clientId :{} ",
//                this.username, this.password, this.hostUrl, this.clientId, this.defaultTopic);
//    }
//
//    @Bean
//    public MqttPahoClientFactory clientFactory() {
//        final MqttConnectOptions options = new MqttConnectOptions();
//        options.setServerURIs(new String[]{hostUrl});
//        options.setUserName(username);
//        options.setPassword(password.toCharArray());
//        final DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
//        factory.setConnectionOptions(options);
//        return factory;
//    }
//
//    @Bean(value = OUTBOUND_CHANNEL)
//    public MessageChannel mqttOutboundChannel() {
//        return new DirectChannel();
//    }
//
//    @Bean
//    @ServiceActivator(inputChannel = OUTBOUND_CHANNEL)
//    public MessageHandler mqttOutbound() {
//        final MqttPahoMessageHandler handler = new MqttPahoMessageHandler(clientId, clientFactory());
//        handler.setDefaultQos(2);
//        handler.setDefaultRetained(false);
//        handler.setDefaultTopic(defaultTopic);
//        handler.setAsync(false);
//        handler.setAsyncEvents(false);
//        return handler;
//    }
//
//    /**
//     * MQTT消息接收处理
//     */
//    @Bean
//    public MessageChannel mqttInputChannel() {
//        return new DirectChannel();
//    }
//
//    /**
//     * 配置client,监听的topic
//     *
//     * @return
//     */
//    @Bean
//    public MessageProducer inbound() {
//        MqttPahoMessageDrivenChannelAdapter adapter =
//                new MqttPahoMessageDrivenChannelAdapter(
//                        clientId + "_inbound", clientFactory(), SUB_TOPICS.split(","));
//        adapter.setCompletionTimeout(3000);
//        adapter.setConverter(new DefaultPahoMessageConverter());
//        adapter.setQos(2);
//        adapter.setOutputChannel(mqttInputChannel());
//        return adapter;
//    }
//
//
//    /**
//     * 通过通道获取数据，在此处处理数据
//     *
//     * @return
//     */
//    @Bean
//    @ServiceActivator(inputChannel = INPUT_CHANNEL)
//    public MessageHandler handler() {
//        return message -> {
//            String topic = Objects.requireNonNull(message.getHeaders().get("mqtt_receivedTopic")).toString();
//            log.info("topic: {}", topic);
//            String[] topics = SUB_TOPICS.split(",");
//            for (String t : topics) {
//                if (t.equals(topic) || t.startsWith("WifiSock")) {
//                    String payload = message.getPayload().toString();
//                    log.info("payload: {}", payload);
//                    mqttCallbackHandler.handler(topic, payload);
//                }
//            }
//        };
//    }
//
//}
